﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Mail;
using System.Net.Mime;
using System.Threading; //公共命名引用空间
namespace Ex419   //本程序的命名空间
{
    public partial class SMTP : Form  //继承用户界面类Form
    {

        public SMTP()
        {
            InitializeComponent();    //构造函数
        }

        //对于界面的载人函数
        private void SMTP_Load(object sender, EventArgs e)
        {
            
        }


        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog open = new OpenFileDialog();//创建打开文件对话框对象
            if (open.ShowDialog() == DialogResult.OK) //执行ShowDialog方法，返回OK，没有选定则无返回，则其他界面是假死状态
            {
                this.textBox3.Text = open.FileName.ToString();//获取文件 value.Tostring 返回为string
            }
         }


        private void button3_Click(object sender, EventArgs e)
        {
            Application.Exit();  //Exit()为静态方法，他不属于任何实例对象,Application为类
        }


        private void button2_Click(object sender, EventArgs e)
        {

                Thread oThread = new Thread(new ThreadStart(SendMessage));//创建线程,嵌套定义
                oThread.Start(); //开始发送邮件线程 

        }


        public void SendMessage()
        {

            MailMessage message = new MailMessage();//创建message类接受相关参数
            message.From = new MailAddress("@gmail.com", "someone");//必须是提供smtp服务的邮件服务器 ，发件人地址和发件人姓名,MailAddress为类，From为MailAddress类型的属性，这里就变成了为From对象初始化空间的过程了
            message.To.Add(new MailAddress("2@qq.com")); //收件人
            message.Subject = textBox1.Text;
            message.CC.Add(new MailAddress("2@qq.com")); //抄送人，多个邮箱可以写多次message.CC.Add(new MailAddress("qq.com"));语句
            message.Bcc.Add(new MailAddress("@qq.com"));//Bcc为message中的属性，其中是MailAddressCollection类的对象，Add为Bcc对象中的方法
            if (textBox3.Text != "")//Text为类中的属性，属性本质上是方法，因此不能把属性当做变量那样使用，也不能把属性作为引用型参数或输出参数来进行传递。
            {
                message.Attachments.Add(new Attachment(textBox3.Text, MediaTypeNames.Application.Octet));

            } 
            message.IsBodyHtml = true;
            message.BodyEncoding = System.Text.Encoding.UTF8;
            message.Body = textBox2.Text;
            message.Priority = System.Net.Mail.MailPriority.High; 
            SmtpClient client = new SmtpClient("smtp.gmail.com", 587); // 587;//Gmail使用的端口 
            client.Credentials = new System.Net.NetworkCredential("@gmail.com", "xxx"); //这里是申请的邮箱和密码 
            client.EnableSsl = true; //必须经过ssl加密 
            try
            {
                client.Send(message);
                MessageBox.Show("发送成功");
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.Message, "发送出错");
            } 

        }



    }
}
